This disclosure relates generally to the field of computer programming. More particularly, but not by way of limitation, it relates to a technique for customizing software applications.
It is typical for a customer to acquire a software package from a vendor or to receive a software package from another organization and use it within the customer's environment. Often, there is the desire to make some number of changes to the software to change the operation or functionality of the software to meet the needs of the customer's environment better or to add additional functionality to cover additional needs for the customer. These changes may be to the logic, structures, data definition or capability, or any other alteration in the functionality of the solution.
However, there comes a point where there is a revision or patch or new release of the software package from the supplier. At this point, the customer is left with the issue that the product has changed from the original definition. How can the customer tell what it has changed? How can the customer apply an update to get the fixes and additional functionality of the new version from the supplier but still preserve the customer's customizations?
In general, this is a very difficult problem. Usually, the solution has been a requirement to redo the customizations on the new release.
Another problem has been a need to have several different sets of customizations of a single environment to satisfy different constituencies using the software package in a shared environment. Each of these constituencies may want to independently (and often in conflict) modify the solution for their specific operation.
This is another difficult problem, usually solved by having independent implementations for the each group, which makes sharing of data difficult and makes the environment more complex.